package pe.com.hermes.hermetic.web.controller.general;

import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;

import java.io.InputStream;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperReport;

import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("reporteResultadoApertura")
public class ReporteResultadoAperturaController implements IController{ 

    @Autowired
    private HermeticFacade servicioHermetic; 
    
    public String mostraReporte(HttpServletRequest request, HttpServletResponse response, List listResultadoApertura) throws Exception {
    
        HttpSession session = request.getSession(false);        
        if (request.getSession().getAttribute("usuario") == null)
            return FORM_SESSION_FINISH;

        /*List listaTransacciones = (List)session.getAttribute("listaMenu3");
        if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.REPORTE_DETALLE_DE_RECOJO)) {
            return FORM_ACCESS_NULL_VIEW;
        }*/    
        //form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
        
        //int accionMapa = 1;
        String cliente = (String)request.getSession().getAttribute("cliente");
        String sucursal = (String)request.getSession().getAttribute("sucursal");
        
        InputStream reportStream = null;
        
        try {
                        
            //envio la lista de puntos agregados en la busqueda
            //List listaPunto = form.getListaPuntoSelec();            
            //model.put("listaPunto", listaPunto);
            // form.setExisteMatriz(servicioHermetic.getIsMatrizActive(cliente,sucursal) );
            
            //datos iniciales
            String formulario = request.getParameter("formulario");
            String fecha_srv = servicioHermetic.getFechaHoy();
            String hora_srv = servicioHermetic.getFecha2().substring(8, 13);
            String codClie = (String)request.getSession().getAttribute("cliente");
            String nomClie = (String)request.getSession().getAttribute("nombreCliente");
            
            String codCuentas = Util.arrayToString((String[])request.getSession(false).getAttribute("chksCuenta"),",");
            String codModulos = Util.arrayToString((String[])request.getSession(false).getAttribute("chksModulo"),",");
            String descCnta = null;
            String descBove = null;
            boolean isAtmActive = servicioHermetic.getParamActive(codClie,sucursal,ConstantesHermetic.CATEG_REPO,ConstantesHermetic.SUB_CATEG_ATM);
            if (codCuentas!=null && codCuentas.length() > 0 && codModulos!=null && codModulos.length() > 0){
                List listDescCnta = servicioHermetic.getDescCuentaMulti(sucursal, codClie, codCuentas);
                List listDescBove = servicioHermetic.getDescModuloMulti(sucursal, codClie, codModulos);
                descCnta = Util.listToString(listDescCnta," / ");
                descBove = Util.listToString(listDescBove," / ");    
            }
            
            //String cod_cnta = request.getParameter("cuenta");
            //String cod_bove = request.getParameter("modulo");
            String fechaDesde = (String)request.getSession().getAttribute("fechaDesde"); 
            String fechaHasta = (String)request.getSession().getAttribute("fechaHasta"); 
            
            
            //String rutaJasper = getServlet().getServletConfig().getServletContext().getInitParameter("rutajasper");
            String rutaJasper = session.getServletContext().getInitParameter("rutajasper");
            
            StringBuffer jasperPath = new StringBuffer(rutaJasper).append("/").append(formulario).append(".jasper");
            
            //List listDetalleRecojo = form.getListaDetalleRecojo();
            //List listaDetalleRecojo = (List)session.getAttribute("listaDetalleRecojo");

            JRDataSource simpleDS = new JRBeanCollectionDataSource(listResultadoApertura);
            
            Map parameters = new HashMap();
            //parameters.put("datasource", subDS1);
            parameters.put("cod_clie", codClie);
            parameters.put("nomClie", nomClie);
            parameters.put("fechaDesde", fechaDesde);
            parameters.put("fechaHasta", fechaHasta);
            //parameters.put("isMatrizActive",form.isExisteMatriz());
            parameters.put("fecha_srv",fecha_srv);
            parameters.put("hora_srv",hora_srv);
            parameters.put("descCnta",descCnta);
            parameters.put("descBove",descBove);
            parameters.put("isAtmActive",isAtmActive);
            parameters.put("contextPath",request.getSession().getServletContext().getRealPath("/"));
            ServletOutputStream servletOutputStream = response.getOutputStream();
            //InputStream reportStream = getServlet().getServletConfig().getServletContext().getResourceAsStream(jasperPath.toString());
            reportStream = request.getSession(false).getServletContext().getResourceAsStream(jasperPath.toString());
            
            response.setContentType("application/pdf");
            byte[] bytes = null;        
            bytes = JasperRunManager.runReportToPdf(reportStream, parameters, simpleDS);
            response.setHeader("Cache-Control","cache"); // HTTP 1.1
            response.setHeader("Pragma","cache"); // HTTP 1.0
            response.setDateHeader ("Expires", -1);         
            response.setContentType("application/pdf");
            response.addHeader("Content-Disposition", "inline; filename=Reporte.pdf");        
            response.setContentLength(bytes.length);         
            servletOutputStream.write(bytes, 0, bytes.length);
            servletOutputStream.flush();
            servletOutputStream.close();
            //model.put(FORM_KEY,form);  
        } catch (Exception e) {
            e.printStackTrace();
            //accionMapa = 0;
            return FORM_ERROR_VIEW;
        }

        return FORM_RESUL_APERTURA_VIEW;    
    
    }

}
